package generics;

import java.util.ArrayList;
import java.util.List;

public class Info<T extends Number>{  // 指定泛型为Number类获取其子类
    private T var;

    public T getVar() {
        return this.var;
    }

    public void setVar(T v){
        this.var = v;
    }

    public String toString() {
        return this.var.toString();
    }

    public static void main(String[] args) {
        // 泛型
//        Info<Integer> info1 = new Info<>();
//        info1.setVar(100);
//        System.out.println(info1.toString());
//        Info<Double> info2 = new Info<>();
//        info2.setVar(3.14);
//        System.out.println(info2.toString());

        // 泛型擦除
//        List<String> list1 = new ArrayList<>();
//        list1.add("abc");
//        List<Integer> list2 = new ArrayList<>();
//        list2.add(123);
//        System.out.println(list1.getClass() == list2.getClass()); // true

        ArrayList<String> list1 = new ArrayList();
        list1.add("1"); //编译通过
//        list1.add(1); //编译错误
        String str1 = list1.get(0); //返回类型就是String

        ArrayList list2 = new ArrayList<String>();
        list2.add("1"); //编译通过
        list2.add(1); //编译通过
        Object object = list2.get(0); //返回类型就是Object

        new ArrayList<String>().add("11"); //编译通过
//        new ArrayList<String>().add(22); //编译错误

        String str2 = new ArrayList<String>().get(0); //返回类型就是String
    }

}
